#include<iostream>
#include<vector>
#include<string>
using namespace std;

int n, maxLen = 0;
vector<string> s;
vector<int> v; // 记录单词使用次数

// 计算两个单词的最小重叠长度
int same(const string &a, const string &b) {
    // 从后往前比较，找到最大重叠长度
    int len = min(a.size(), b.size());
    for(int l = 1; l < len; l++) {
        if(a.substr(a.size()-l) == b.substr(0, l))
            return l;
    }
    return 0; // 无重叠
}

void dfs(string current, int length) {
    // 如果当前单词的长度已经超过了最长单词的长度，更新最长单词长度
    maxLen = max(maxLen, length);
    for(int i = 1; i <= n; i++) {
        if(v[i] >= 2) continue; // 每个单词最多用2次
        int cover = same(current, s[i]);
        if(cover > 0) {
            v[i]++;
            dfs(s[i], length + s[i].size() - cover);
            v[i]--;
        }
    }
}

int main() {
    cin >> n;
    s.resize(n+1);
    v.resize(n+1, 0);
    for(int i=1; i<=n; i++) cin >> s[i];
    
    char ch;
    cin >> ch;
    
    // 从所有以ch开头的单词开始DFS
    for(int i = 1; i <= n; i++) {
        if(s[i][0] == ch) {
            v[i]++;
            dfs(s[i], s[i].size());
            v[i]--;
        }
    }
    
    cout << maxLen << endl;
    return 0;
}